{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modeling of bank failures by FDIC \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "scikit-learn version: 0.18.1\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import time\n",
    "\n",
    "import os\n",
    "import functools\n",
    "import math\n",
    "import random\n",
    "import sys, getopt\n",
    "import sklearn\n",
    "\n",
    "sys.path.append(\"..\")\n",
    "import grading\n",
    "\n",
    "try:\n",
    "    import matplotlib.pyplot as plt\n",
    "    %matplotlib inline\n",
    "except:\n",
    "    pass\n",
    "print('scikit-learn version:', sklearn.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "### ONLY FOR GRADING. DO NOT EDIT ###\n",
    "submissions=dict()\n",
    "assignment_key=\"7VcH6P8REeeRWA42vRAjYg\" \n",
    "all_parts=[\"o5YYT\", \"2cHUA\", \"Mxrav\",\"JFNf3\", \"ivHQa\"]\n",
    "### ONLY FOR GRADING. DO NOT EDIT ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# token expires every 30 min\n",
    "COURSERA_TOKEN = \" \" # the key provided to the Student under his/her email on submission page\n",
    "COURSERA_EMAIL = \" \" # the email"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# common cell - share this across notebooks\n",
    "state_cols = ['log_TA','NI_to_TA', 'Equity_to_TA', 'NPL_to_TL', 'REO_to_TA', \n",
    "              'ALLL_to_TL', 'core_deposits_to_TA', 'brokered_deposits_to_TA', \n",
    "              'liquid_assets_to_TA', 'loss_provision_to_TL', 'NIM', 'assets_growth']\n",
    "\n",
    "all_MEVs = np.array(['term_spread',\n",
    "                    'stock_mkt_growth',\n",
    "                    'real_gdp_growth',\n",
    "                    'unemployment_rate_change',\n",
    "                    'treasury_yield_3m',\n",
    "                    'bbb_spread',\n",
    "                    'bbb_spread_change'])\n",
    "\n",
    "MEV_cols = all_MEVs.tolist()\n",
    "\n",
    "next_state_cols = ['log_TA_plus_1Q','NI_to_TA_plus_1Q', 'Equity_to_TA_plus_1Q', 'NPL_to_TL_plus_1Q', 'REO_to_TA_plus_1Q', \n",
    "                   'ALLL_to_TL_plus_1Q', 'core_deposits_to_TA_plus_1Q', 'brokered_deposits_to_TA_plus_1Q', \n",
    "                   'liquid_assets_to_TA_plus_1Q', 'loss_provision_to_TL_plus_1Q', \n",
    "                   'ROA_plus_1Q', \n",
    "                   'NIM_plus_1Q', \n",
    "                   'assets_growth_plus_1Q', \n",
    "                   'FDIC_assessment_base_plus_1Q_n']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opening ../readonly/df_train_FDIC_defaults_1Y.h5 in read-only mode\n",
      "Opening ../readonly/df_test_FDIC_defaults_1Y.h5 in read-only mode\n",
      "Opening ../readonly/data_adj_FDIC_small.h5 in read-only mode\n",
      "Opening ../readonly/df_FDIC_learn.h5 in read-only mode\n",
      "['IDRSSD', 'date']\n"
     ]
    }
   ],
   "source": [
    "df_train = pd.read_hdf('../readonly/df_train_FDIC_defaults_1Y.h5', key='df')\n",
    "df_test = pd.read_hdf('../readonly/df_test_FDIC_defaults_1Y.h5', key='df')\n",
    "df_data = pd.read_hdf('../readonly/data_adj_FDIC_small.h5', key='df')\n",
    "df_closure_learn = pd.read_hdf('../readonly/df_FDIC_learn.h5',key='df')\n",
    "print(df_closure_learn.index.names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Construct training and testing datasets for logistic regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5b0c82f0f0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nhoIkqfD/AUgAd2Hdl6vDAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5b403886a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_test.plot(x=state_cols[0], y='defaulter', kind='scatter')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5affcf99e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot 4 scatter plots together\n",
    "\n",
    "# log_TA / NI_to_TA\n",
    "# log_TA / NPL_to_TL\n",
    "# log_TA / Equity_to_TA\n",
    "# log_TA /ROA\n",
    "\n",
    "first_indx = [0, 0, 0, 0]\n",
    "second_indx = [1, 3, 2, 10]\n",
    "\n",
    "X_train = df_train[state_cols].values\n",
    "y_train = df_train.defaulter.values # .reshape(-1,1)\n",
    "\n",
    "num_plots = 4\n",
    "if num_plots % 2 == 0:\n",
    "    f, axs = plt.subplots(num_plots // 2, 2)\n",
    "else:\n",
    "    f, axs = plt.subplots(num_plots// 2 + 1, 2)\n",
    "    \n",
    "f.subplots_adjust(hspace=.3)\n",
    "\n",
    "f.set_figheight(10.0)\n",
    "f.set_figwidth(10.0)\n",
    "    \n",
    "for i in range(num_plots):\n",
    "    if i % 2 == 0:\n",
    "        first_idx = i // 2\n",
    "        second_idx = 0\n",
    "    else:\n",
    "        first_idx = i // 2\n",
    "        second_idx = 1\n",
    "        \n",
    "    axs[first_idx,second_idx].plot(X_train[y_train == 1.0, first_indx[i]], \n",
    "                                   X_train[y_train == 1.0, second_indx[i]], 'r^', label=\"Failed\")\n",
    "    axs[first_idx,second_idx].plot(X_train[y_train == 0.0, first_indx[i]], \n",
    "                                   X_train[y_train == 0.0, second_indx[i]], 'go',label=\"Non-failed\") \n",
    "    \n",
    "    axs[first_idx, second_idx].legend()\n",
    "    axs[first_idx, second_idx].set_xlabel('%s' % state_cols[first_indx[i]])\n",
    "    axs[first_idx, second_idx].set_ylabel('%s' % state_cols[second_indx[i]])\n",
    "    axs[first_idx, second_idx].set_title('Failed banks vs non-failed banks')\n",
    "    axs[first_idx, second_idx].grid(True)\n",
    "    \n",
    "if num_plots % 2 != 0:\n",
    "    f.delaxes(axs[i // 2, 1])\n",
    "    \n",
    "# plt.savefig('Failed_vs_nonfailed_rr_plot.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def calc_metrics(model, df_test, y_true, threshold=0.5):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    model - trained model such as DecisionTreeClassifier, etc.\n",
    "    df_test - Data Frame of predictors\n",
    "    y_true - True binary labels in range {0, 1} or {-1, 1}. If labels are not binary, pos_label should be explicitly given.\n",
    "    \"\"\"\n",
    "    if model is None:\n",
    "        return 0., 0., 0.\n",
    "    \n",
    "    # prediction \n",
    "    predicted_sm = model.predict(df_test, linear=False)\n",
    "    predicted_binary = (predicted_sm > threshold).astype(int)\n",
    "\n",
    "    # print(predicted_sm.shape, y_true.shape)\n",
    "    fpr, tpr, _ = metrics.roc_curve(y_true, predicted_sm, pos_label=1)\n",
    "    \n",
    "    # compute Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores\n",
    "    roc_auc = metrics.auc(fpr, tpr)\n",
    "    ks = np.max(tpr - fpr) # Kolmogorov - Smirnov test\n",
    "\n",
    "    # note that here teY[:,0] is the same as df_test.default_within_1Y\n",
    "    accuracy_score = metrics.accuracy_score(y_true, predicted_binary)\n",
    "    \n",
    "    # equivalently, Area Under the ROC Curve could be computed as:\n",
    "    # compute Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores\n",
    "    # auc_score = metrics.roc_auc_score(y_true, predicted_sm)\n",
    "\n",
    "    try:\n",
    "        plt.title('Logistic Regression ROC curve')\n",
    "        plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % roc_auc)\n",
    "        plt.legend(loc='lower right')\n",
    "        plt.plot([0,1], [0,1], 'r--')\n",
    "        plt.xlabel('False positive rate')\n",
    "        plt.ylabel('True positive rate')\n",
    "\n",
    "        # plt.savefig('ROC_curve_1.png')\n",
    "        plt.show()\n",
    "    except:\n",
    "        pass\n",
    "\n",
    "    return roc_auc, accuracy_score, ks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def make_test_train(df_train, df_test, choice=0, predict_within_1Y=False):\n",
    "    \"\"\"\n",
    "    make the train and test datasets\n",
    "    Arguments:\n",
    "    choice - an integer 0 or -1. Controls selection of predictors. \n",
    "    Add tangible equity and assessment base as predictors\n",
    "\n",
    "    predict_within_1Y - boolean  if True, predict defaults within one year\n",
    "    Return:\n",
    "        a tuple of:\n",
    "        - training data set predictors, np.array\n",
    "        - training data set : variable to predict, np.array\n",
    "        - test data set : variable to predict, np.array\n",
    "        - predictor variable names\n",
    "    \"\"\"\n",
    "    \n",
    "    if choice == -1: # only state cols\n",
    "        predictors = state_cols\n",
    "    elif choice == 0:  # original variables\n",
    "        predictors = state_cols + MEV_cols \n",
    "\n",
    "    trX = df_train[predictors].values\n",
    "    teX = df_test[predictors].values\n",
    "    num_features = len(predictors)    \n",
    "    num_classes = 2\n",
    "\n",
    "    if predict_within_1Y == True:\n",
    "        trY = df_train[['default_within_1Y','no_default_within_1Y']].values\n",
    "        teY = df_test[['default_within_1Y','no_default_within_1Y']].values\n",
    "    else:\n",
    "        trY = df_train[['defaulter','non_defaulter']].values\n",
    "        teY = df_test[['defaulter','non_defaulter']].values\n",
    "    return trX, trY, teX, teY, predictors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>term_spread</th>\n",
       "      <th>stock_mkt_growth</th>\n",
       "      <th>real_gdp_growth</th>\n",
       "      <th>unemployment_rate_change</th>\n",
       "      <th>treasury_yield_3m</th>\n",
       "      <th>bbb_spread</th>\n",
       "      <th>bbb_spread_change</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>term_spread</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.002993</td>\n",
       "      <td>-0.145941</td>\n",
       "      <td>0.299972</td>\n",
       "      <td>-0.633991</td>\n",
       "      <td>0.392349</td>\n",
       "      <td>-0.465767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>stock_mkt_growth</th>\n",
       "      <td>0.002993</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.148941</td>\n",
       "      <td>0.461947</td>\n",
       "      <td>-0.081915</td>\n",
       "      <td>0.417379</td>\n",
       "      <td>-0.762702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>real_gdp_growth</th>\n",
       "      <td>-0.145941</td>\n",
       "      <td>-0.148941</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.825802</td>\n",
       "      <td>0.041596</td>\n",
       "      <td>-0.820518</td>\n",
       "      <td>0.385007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unemployment_rate_change</th>\n",
       "      <td>0.299972</td>\n",
       "      <td>0.461947</td>\n",
       "      <td>-0.825802</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.034355</td>\n",
       "      <td>0.881223</td>\n",
       "      <td>-0.657093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>treasury_yield_3m</th>\n",
       "      <td>-0.633991</td>\n",
       "      <td>-0.081915</td>\n",
       "      <td>0.041596</td>\n",
       "      <td>0.034355</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.272072</td>\n",
       "      <td>0.290414</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bbb_spread</th>\n",
       "      <td>0.392349</td>\n",
       "      <td>0.417379</td>\n",
       "      <td>-0.820518</td>\n",
       "      <td>0.881223</td>\n",
       "      <td>-0.272072</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.716249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bbb_spread_change</th>\n",
       "      <td>-0.465767</td>\n",
       "      <td>-0.762702</td>\n",
       "      <td>0.385007</td>\n",
       "      <td>-0.657093</td>\n",
       "      <td>0.290414</td>\n",
       "      <td>-0.716249</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          term_spread  stock_mkt_growth  real_gdp_growth  \\\n",
       "term_spread                  1.000000          0.002993        -0.145941   \n",
       "stock_mkt_growth             0.002993          1.000000        -0.148941   \n",
       "real_gdp_growth             -0.145941         -0.148941         1.000000   \n",
       "unemployment_rate_change     0.299972          0.461947        -0.825802   \n",
       "treasury_yield_3m           -0.633991         -0.081915         0.041596   \n",
       "bbb_spread                   0.392349          0.417379        -0.820518   \n",
       "bbb_spread_change           -0.465767         -0.762702         0.385007   \n",
       "\n",
       "                          unemployment_rate_change  treasury_yield_3m  \\\n",
       "term_spread                               0.299972          -0.633991   \n",
       "stock_mkt_growth                          0.461947          -0.081915   \n",
       "real_gdp_growth                          -0.825802           0.041596   \n",
       "unemployment_rate_change                  1.000000           0.034355   \n",
       "treasury_yield_3m                         0.034355           1.000000   \n",
       "bbb_spread                                0.881223          -0.272072   \n",
       "bbb_spread_change                        -0.657093           0.290414   \n",
       "\n",
       "                          bbb_spread  bbb_spread_change  \n",
       "term_spread                 0.392349          -0.465767  \n",
       "stock_mkt_growth            0.417379          -0.762702  \n",
       "real_gdp_growth            -0.820518           0.385007  \n",
       "unemployment_rate_change    0.881223          -0.657093  \n",
       "treasury_yield_3m          -0.272072           0.290414  \n",
       "bbb_spread                  1.000000          -0.716249  \n",
       "bbb_spread_change          -0.716249           1.000000  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# look at correlations\n",
    "df_train[MEV_cols].corr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Logistic regression with statsmodels\n",
    "\n",
    "### Part 1\n",
    "Perform logistic regression using **cols_to_use** as predictors. Use df_train pandas DataFrame as training data set, and df_test pandas DataDrame as testing data set to perform prediction based on the already trained model. Utilize statsmodels package. The result of fitting logistic regression should be assigned to variable named **model**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.159379\n",
      "         Iterations 9\n"
     ]
    }
   ],
   "source": [
    "import statsmodels.api as sm\n",
    "from sklearn import metrics\n",
    "\n",
    "cols_to_use = state_cols + MEV_cols  + ['const']\n",
    "model = None\n",
    "df_train['const'] = 1\n",
    "\n",
    "### START CODE HERE ### (≈ 3 lines of code)\n",
    "logit = sm.Logit(df_train.defaulter, df_train[cols_to_use])\n",
    "model = logit.fit()\n",
    "### END CODE HERE ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAduhowww+nitAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5b197c1e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy score 0.969789\n",
      "AUC score 0.986043\n",
      "Kolmogorov-Smirnov statistic 0.950639\n"
     ]
    }
   ],
   "source": [
    "# prediction \n",
    "predicted_sm = np.array([])\n",
    "\n",
    "### START CODE HERE ### (≈ 3 lines of code)\n",
    "if model is not None:\n",
    "    predicted_sm = model.predict(df_test[cols_to_use], linear=False)\n",
    "### END CODE HERE ###\n",
    "\n",
    "threshold = 0.5\n",
    "predicted_binary = (predicted_sm > threshold).astype(int)\n",
    "auc_score, accuracy_score, ks = calc_metrics(model, df_test[cols_to_use], df_test.defaulter)\n",
    "\n",
    "print('Accuracy score %f' % accuracy_score)\n",
    "print('AUC score %f' % auc_score)\n",
    "print('Kolmogorov-Smirnov statistic %f' % ks)\n",
    "\n",
    "# note that here teY[:,0] is the same as df_test.default_within_1Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.96978851963746227, 0.98604311289733282, 0.95063938618925836]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part_1=[accuracy_score, auc_score, ks]\n",
    "\n",
    "try:\n",
    "    part1 = \" \".join(map(repr, part_1))\n",
    "except TypeError:\n",
    "    part1 = repr(part_1)    \n",
    "    \n",
    "submissions[all_parts[0]]=part1\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[0],all_parts,submissions)\n",
    "[accuracy_score, auc_score, ks]\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Logistic Regression with sklearn\n",
    "\n",
    "### Part 2 \n",
    "In Part 2 you will use scikit-learn to perform logistic regression using the same training and test datasets.\n",
    "Once the model is trained using trX, thisTrY, test it using teX, thisTeY and compute logistic regression score.\n",
    "\n",
    "- Use **\"l1\"** penalty\n",
    "- Set inverse of regularization strength to **1000.0**; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.\n",
    "- Set tolerance to **1e-6**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression score: 0.969789\n"
     ]
    }
   ],
   "source": [
    "from sklearn import neighbors, linear_model\n",
    "\n",
    "trX, trY, teX, teY, predictors = make_test_train(df_train, df_test)\n",
    "lr_score = 0.\n",
    "thisTrY = trY[:,0]\n",
    "thisTeY = teY[:,0]\n",
    "\n",
    "logistic = None # instantiate a model and reference it\n",
    "result = None # result of fitting the model\n",
    "\n",
    "### START CODE HERE ### (≈ 3 lines of code)\n",
    "# .... define random_state argment in logistic regression class. Ininitialize it to 42\n",
    "# such as this: random_state=42\n",
    "# the variable name required for grading lr_score\n",
    "logistic = linear_model.LogisticRegression(penalty='l1', tol=1e-6, C=1000.0)\n",
    "result = logistic.fit(trX, thisTrY)\n",
    "lr_score = result.score(teX, thisTeY)\n",
    "### END CODE HERE ###\n",
    "print('LogisticRegression score: %f' % lr_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.96978851963746227"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part2=str(lr_score)   \n",
    "submissions[all_parts[1]]=part2\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:2],all_parts,submissions)\n",
    "lr_score\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Instructions:**\n",
    "In this part you will again use scikit learn logistic regression but with different set of predictors. This will be a smaller set of predictor variables based on the analysis of P-values from the logistic regression. Use cols_to_use as predictors in df_train and df_test data sets. Use  **defaulter** column as something to predict.\n",
    "\n",
    "Initialize reference to the logistic regression model **logistic** with an instance of appropriate class from  scikit learn module and let **result** be the result of fitting the model to the training data set.\n",
    "\n",
    "Just as before initialize the model with the following parameters:\n",
    "- Use **\"l1\"** penalty\n",
    "- Set inverse of regularization strength to **1000.0**; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.\n",
    "- Set tolerance to **1e-6**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression score: 0.963746\n"
     ]
    }
   ],
   "source": [
    "# Do Logistic Regression with a smaller number of predictor, based on analysis of P-values \n",
    "# for the logistic regression with a full set of variables\n",
    "\n",
    "# a smaller set is based on the analysis of P-values for the logistic regression\n",
    "cols_to_use = ['log_TA', 'NI_to_TA', 'Equity_to_TA', 'NPL_to_TL',\n",
    "               'core_deposits_to_TA',\n",
    "               'brokered_deposits_to_TA',\n",
    "               'liquid_assets_to_TA'\n",
    "              ] + ['term_spread', 'stock_mkt_growth']\n",
    "\n",
    "lr_score = 0.\n",
    "logistic = None\n",
    "result = None\n",
    "### START CODE HERE ### (≈ 3 lines of code)\n",
    "# .... when initializing logistic regression class in 'sklearn', set random_state to 42 like this: random_state=42\n",
    "# ... like this: random_state=42\n",
    "# ... for grading, please store the logistic regression model into variable : logistic\n",
    "trX = df_train[cols_to_use].values\n",
    "teX = df_test[cols_to_use].values\n",
    "thisTrY = (df_train.defaulter.values)\n",
    "thisTeY = (df_test.defaulter.values)\n",
    "logistic = linear_model.LogisticRegression(penalty='l1', tol=1e-6, C=1000.0)\n",
    "result = logistic.fit(trX, thisTrY)\n",
    "lr_score = result.score(teX, thisTeY)\n",
    "print('LogisticRegression score: %f' % lr_score)\n",
    "### END CODE HERE ###\n",
    "\n",
    "# combine results of the Logistic Regression to a small dataframe df_coeffs_LR\n",
    "df_coeffs_LR = pd.DataFrame({0: np.array([0.] * (len(cols_to_use) + 1), dtype=np.float32)})\n",
    "if logistic is not None:\n",
    "    model_params = np.hstack((logistic.coef_[0], logistic.intercept_))\n",
    "    df_coeffs_LR = pd.DataFrame(data=model_params, index=cols_to_use + ['const'])\n",
    "    df_coeffs_LR"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([-1.47323757, -0.79711983, -1.88434213,  0.33807752, -0.50266616,\n",
       "        0.02356127, -0.51341327,  0.01134575,  0.02644013, -0.09381917])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part_3=list(df_coeffs_LR.values.squeeze())\n",
    "try:\n",
    "    part3 = \" \".join(map(repr, part_3))\n",
    "except TypeError:\n",
    "    part3 = repr(part_3)    \n",
    "submissions[all_parts[2]]=part3\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:3],all_parts,submissions)\n",
    "df_coeffs_LR.values.squeeze()\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Logistic Regression with Tensorflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Setup inputs and expeced outputs for Logistic Regression using Tensorflow\n",
    "cols = state_cols + MEV_cols\n",
    "# inputs to Logistic Regression (via Tensorflow)\n",
    "X_trainTf = df_train[cols].values\n",
    "X_testTf = df_test[cols].values\n",
    "\n",
    "# add constant columns to both\n",
    "X_trainTf = np.hstack((np.ones((X_trainTf.shape[0], 1)), X_trainTf))\n",
    "X_testTf = np.hstack((np.ones((X_testTf.shape[0], 1)), X_testTf))\n",
    "\n",
    "# exepectd outputs:\n",
    "y_trainTf = df_train.defaulter.astype('int').values.reshape(-1,1)\n",
    "y_testTf = df_test.defaulter.astype('int').values.reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Unique values to predict: [0 1]\n",
      "Number of samples to train on: 641\n",
      "Number of samples to test on: 331\n"
     ]
    }
   ],
   "source": [
    "print('Unique values to predict:', np.unique(y_trainTf))\n",
    "print('Number of samples to train on:', y_trainTf.shape[0])\n",
    "print('Number of samples to test on:', y_testTf.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# to make this notebook's output stable across runs\n",
    "def reset_graph(seed=42):\n",
    "    tf.reset_default_graph()\n",
    "    tf.set_random_seed(seed)\n",
    "    np.random.seed(seed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def random_batch(X_train, y_train, batch_size):\n",
    "    np.random.seed(42)\n",
    "    rnd_indices = np.random.randint(0, len(X_train), batch_size)\n",
    "    X_batch = X_train[rnd_indices]\n",
    "    y_batch = y_train[rnd_indices]\n",
    "    return X_batch, y_batch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build Logistic Regression TF model\n",
    "\n",
    "**instructions**\n",
    "\n",
    "in tensorflow create: \n",
    " - placeholder for inputs called 'X' \n",
    " - placeholder for inputs called 'y'\n",
    " - variable for model parameters called 'theta', initialized with theta_init\n",
    "\n",
    "loss function: use log loss\n",
    "optimizer: use Gradient Descent optimizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "\n",
    "# define the model\n",
    "reset_graph()\n",
    "n_inputs = X_trainTf.shape[1]\n",
    "learning_rate = 0.01\n",
    "theta_init = tf.random_uniform([n_inputs, 1], -1.0, 1.0, seed=42)\n",
    "\n",
    "# build Logistic Regression model using Tensorflow\n",
    "\n",
    "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n",
    "y = tf.placeholder(tf.float32, shape=(None, 1), name=\"y\")\n",
    "theta = tf.Variable(theta_init, name=\"theta\")\n",
    "\n",
    "### START CODE HERE ### (≈ 6-7 lines of code)\n",
    "### ....\n",
    "### .... for grading please store probabilities in y_proba\n",
    "logits = tf.matmul(X, theta)\n",
    "y_proba = tf.sigmoid(logits) # 1 / (1 + tf.exp(-logits))\n",
    "\n",
    "# uses epsilon = 1e-7 by default to regularize the log function\n",
    "loss = tf.losses.log_loss(y, y_proba, epsilon=1e-07)\n",
    "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n",
    "\n",
    "### END CODE HERE ###\n",
    "\n",
    "init = tf.global_variables_initializer()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Train Logistic Regression TF model\n",
    "\n",
    "**Instructions**\n",
    "- Use random_batch() function to grab batches from X_trainTf and y_trainTf.\n",
    "- Once the model is trained evaluate it based on X_testTf and y_testTf. \n",
    "- The **y_proba_val** should be assigned the result of the evaluation on test dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_epochs = 1001\n",
    "batch_size = 50\n",
    "num_rec = X_trainTf.shape[0]\n",
    "n_batches = int(np.ceil(num_rec / batch_size))\n",
    "\n",
    "y_proba_val = np.array([], dtype=np.float32)\n",
    "\n",
    "with tf.Session() as sess:\n",
    "    ### START CODE HERE ### (≈ 6-7 lines of code)\n",
    "    ## ....\n",
    "    for epoch in range(n_epochs):\n",
    "        sess.run(init)\n",
    "        X_trainTf_batch, y_trainTf_batch = random_batch(X_trainTf, y_trainTf, batch_size)\n",
    "        sess.run([optimizer, loss], feed_dict={X: X_trainTf_batch, y: y_trainTf_batch})\n",
    "    \n",
    "    y_proba_val = sess.run(y_proba, feed_dict={X: X_testTf})\n",
    "    \n",
    "    ### END CODE HERE ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "171\n"
     ]
    }
   ],
   "source": [
    "# predictions\n",
    "threshold = 0.5\n",
    "y_pred = (y_proba_val >= threshold)\n",
    "print(np.sum(y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True,  True,  True, False,  True, False,\n",
       "        True, False,  True,  True, False,  True,  True, False,  True,\n",
       "        True, False,  True, False, False, False, False, False,  True,\n",
       "       False, False, False, False, False,  True,  True,  True,  True,\n",
       "        True, False, False, False,  True, False,  True,  True,  True,\n",
       "       False, False, False, False,  True,  True,  True, False,  True,\n",
       "       False,  True, False, False, False,  True,  True,  True, False,\n",
       "       False,  True,  True, False,  True,  True,  True, False,  True,\n",
       "       False,  True, False, False,  True, False,  True,  True,  True,\n",
       "        True, False,  True,  True, False, False, False, False,  True,\n",
       "       False,  True,  True, False, False,  True, False,  True,  True,\n",
       "        True,  True,  True, False,  True,  True,  True,  True,  True,\n",
       "        True, False, False, False,  True, False,  True,  True,  True,\n",
       "        True, False, False,  True,  True, False,  True, False, False,\n",
       "       False, False,  True, False, False, False,  True,  True, False,\n",
       "       False, False, False, False,  True, False,  True, False, False,\n",
       "       False, False, False,  True, False, False,  True,  True,  True,\n",
       "        True, False,  True, False, False,  True,  True, False, False,\n",
       "       False, False,  True,  True, False,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True, False, False, False,  True,\n",
       "       False, False,  True, False, False,  True, False,  True, False,\n",
       "       False, False,  True, False, False, False,  True,  True, False,\n",
       "        True,  True,  True, False,  True,  True,  True, False,  True,\n",
       "       False,  True,  True, False, False,  True,  True, False,  True,\n",
       "        True, False,  True,  True, False,  True, False, False, False,\n",
       "       False, False, False, False, False, False,  True, False,  True,\n",
       "       False, False,  True,  True,  True,  True, False,  True,  True,\n",
       "        True,  True,  True,  True,  True, False, False,  True,  True,\n",
       "       False,  True,  True,  True, False, False, False, False,  True,\n",
       "        True, False,  True,  True, False,  True,  True,  True,  True,\n",
       "       False, False,  True,  True, False, False, False, False, False,\n",
       "       False,  True, False,  True,  True, False,  True,  True,  True,\n",
       "        True,  True, False,  True,  True, False, False,  True,  True,\n",
       "        True,  True,  True, False,  True,  True,  True, False, False,\n",
       "        True, False, False,  True, False, False, False,  True, False,\n",
       "        True, False, False, False, False, False,  True,  True, False,\n",
       "        True, False, False,  True,  True,  True, False], dtype=bool)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred.squeeze()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "precision:  0.80701754386\n",
      "recall:  0.857142857143\n",
      "AUC score =  0.900438436244\n",
      "roc_auc =  0.900438436244\n",
      "KS_test =  0.694373401535\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XnclXP+x/HXR1pQtspWUkZJjKJEJNtE1gaRNTVM09gZ\nRsaatSm/YRhJYrJmyyiU7FlCi/YFCS0iLbQpLZ/fH9+r213dy7nv7utcZ3k/H4/zOOdc5zrnfK7c\n7s/93T5fc3dEREQAtkg6ABERyRxKCiIiUkBJQURECigpiIhIASUFEREpoKQgIiIFlBRERKSAkoKI\niBRQUpCcYmbfmNkvZrbMzL43swFmVr3Q64ea2TtmttTMfjazV8ysyUafsa2Z3Wdms6LP+Sp6Xiv9\nVySSXkoKkotOdvfqQDPgAOB6ADNrBbwBDAZ2AxoAE4CPzGzP6JwqwNvAvkA7YFugFbAAaBl34Bbo\n/0tJjH74JGe5+/fAcEJyAOgFPOHu/3b3pe6+yN1vBD4Bbo3O6QTUA05196nuvs7d57v7He4+tKTv\nM7PdzewlM/vRzBaa2X+i47ea2VOFzqtvZm5mW0bP3zOzO83sI2AFcK2Zjdnos68ysyHR46pmdk/U\nkvnBzPqa2Vab968lEigpSM4ys7rA8cAMM9saOBR4oYhTnwfaRo//ALzu7svK+F2VgFeBb4H6QB3g\n2TJ8xPlAV6AG0BfY28waFnr9HOCZ6HFPoBEh2e0VfdfNZYlXpDhKCpKLXjazpcBsYD5wC7Aj4ed9\nXhHnzwPWjxfULOac0rQkdEld6+7L3X2lu39YhvcPcPcp7r7G3X8mdHGdDRAlh8bAEDMzQvK4Kmrp\nLAXuAs4qR8wim1BSkFz0R3evARxJ+GVaC1gMrAN2LeL8XQljBgALizmnNLsD37r7mnK8F0ICK+wZ\noqRAaCW87O4rgNrA1sBYM/vJzH4CXo+Oi2w2JQXJWe4+AhgA3OPuy4GPgTOKOPVMwuAywFvAcWa2\nTRm/bjZQb/04wUaWE36Rr7dLUeFu9PxNoLaZNSMkh/VdRwuAX4B93X376LZdNLAustmUFCTX3Qe0\nNbOmQHfgAjO73MxqmNkOZnYHYXZRj+j8Jwm/4AeZWWMz28LMaprZP8zshBK+ZxSh26mnmW1jZtXM\n7LDotfFAGzOrZ2bbEc2GKom7ryaMf/QmdH29GR1fBzwC3GtmOwGYWR0zO64s/ygixVFSkJzm7j8C\nTwA3R338xwGnEX6Bf0uYstra3b+Mzl9FGGyeTvhFvITwC78W8GkJ37MWOJkw8DsLmAN0jF57E3gO\nmAiMJQxIp+KZKJYXNuqWug6YAXxiZksIrZu9U/xMkRKZdl4TEZH11FIQEZECRQ2KiUgRzKweMLWY\nl5u4+6x0xiMSB3UfiYhIgaxrKdSqVcvr16+fdBgiIlll7NixC9y91PUsWZcU6tevz5gxY0o/UURE\nCpjZt6mcp4FmEREpoKQgIiIFlBRERKSAkoKIiBRQUhARkQKxJQUze8zM5pvZ5GJeNzO738xmmNlE\nMzswrlhERCQ1cbYUBhD2uC3O8UDD6NYVeCjGWEREJAWxrVNw9/fNrH4Jp7Qn7JfrhGqP25vZru5e\nnl2vRCRPrVwJ998Py8q0gWp22WLtanb46Wv2ad+IY4+N97uSXLxWhw13m5oTHdskKZhZV0Jrgnr1\n6qUlOBGBVavgo49g9eqkIynexIlw3XXhsVmyscShmY+jPxeyMz/wcLUvOPbYsu7/VDZZsaLZ3fsB\n/QBatGihYk0iafLEE9C1a9JRpGb8eGjaNOkoKti6dbDfubBoEfTpw22nxZsQINmkMJewr+16daNj\nIpIhli8P98OHQ40aycZSkm23hSZNko6iAn38Mey/P2yzDTz/PNSpAzvskJavTjIpDAEuNbNngYOB\nnzWeIFJ2DzwA/frF89kLFoT7li1h++3j+Q4pZOlSuP56ePBBuPVWuOUW2G+/tIYQW1Iws4HAkUAt\nM5sD3AJUBnD3vsBQ4ATCtoIrgC5xxSKSS37+GXr0gBUrwvPXXguDrEcfXfHf1agR7LEHbLddxX+2\nbGT48NBXN3s2XH45/O1viYQR5+yjs0t53YFL4vp+kUw3bx68+WbZ3zdhAtx7L+y4I1SuHI5deCHc\nc0/FxidpdMcdcNNN0LgxfPghHHpoYqFkxUCzSLZZtw6+/hpK2sPqllvgmWfK9/lmMHo07Lln+d4v\nGWL16pDZTzghzK298UaoVi3RkJQURGJw551w882ln9egAbz1Vtk/v0YNqF3qdimSsebNg0svDYPH\n/fvDgQeGWwZQUhCpQJ99BqeeCvPnh4kjffuWfP5+++mv/bziDgMGwNVXwy+/hMEh94xaYKGkIFJO\nzz0Hzz674bFZs8Lt7LPDwO955yUTm2Sgb7+FP/85DCQdfnhoITRqlHRUm1BSkMQ8+2yYaJGt+vWD\nuXOhYcMNjx9zDDz6KGy1VTJxSYb65RcYNw769IG//AW2yMwi1UoKEht3mDwZlizZ9LXly8Nf09nu\nvPPgySeTjkIy1rRpoUl5661hZtGsWRn/14KSgsRm8uSwKLMkffpAp07piScOW2+ddASSkVavhl69\n4LbboHr10G1Up07GJwRQUpAK8q9/Fb/WplcvaNZs0+OVK4fp2FWqxBubSFqNHQt/+lOo1NexYyjh\nutNOSUeVMiUF2SxTpsAll4RWcvXqmyaG6tXDzLuEp16LpMeyZdC2bfiBf/llaN8+6YjKTElBUvbW\nW/D66xsemzgRRowIkynatg2LMkXyzvoSrdWrw6BBcMABWVssSklBivTBB78VQ1vvxhth+vRNu0X3\n2iuUbcmC7lKRirVkCXTvDg89BE8/DeecA0cdlXRUm0VJQTawahV8/jm0aVP06x06wAsvpDcmkYw0\ndCh06wZz5sCVV2ZlV1FRlBRkAwcdBJMmhce9erHJ1n8bz8kXyUtXXBEGkJs0gZEj4ZBDko6owigp\n5LmhQ8MfOWvXhudffw1HHBGmiXbsGEo1iAi/VTc0C0lg++3hH/+AqlWTjauCKSnkqUWLws/zyJHw\n5Ze/lWM47LAwW6hly2TjE8ko330Hf/1rqF1yxRW5sfKyGEoKeWrkSHj4YdhtNzj5ZK3KFSmSe6hZ\ncs01YcCtbdukI4qdkkIe+emnsMoeQjcRwODB0KJFcjGJZKyZM8NK5HfeCX2q/fuHqXY5Tkkhjxx5\nZNi1qzBNIxUpxrRpMGZMaFJfdFHGFrCraEoKeWTx4pAYLrssPN9uuzB5QkQiU6aERHDBBXDiiaFJ\nveOOSUeVVkoKOWz8eLjhBlizJjz/4YcwTnbaacnGJZJxfv0VevYMeyXXrg1nnBGqHeZZQgDIj/ZQ\nnlm1KhSou/baMOV08eKw8PKAA+Ckk5KOTiTDjB4dBtZuuSWszhw/Pq/L36qlkCPmzg1doBBKVq8v\nTNegQZhptKX+S4ts6ptvQqnenXeGIUPCVLw8p18VOeK002DUqA2PjRkT9gLPoO1fRTLDzJlhc+z6\n9eHxx8P4wXbbJR1VRlD3UY5YtiwMIn/wQbiNH6+EILKJn38OW2E2avTbX1HnnKOEUIhaClnk3HPD\n5IiifPVVmEnUunV6YxLJGq++GgrYzZsHV18N++2XdEQZSUkhiwwcGArS7bPPpq/Vrx9m0YnIRtzD\n/xxPPhkSwUsvqY5LCZQUskzHjmHbVxFJkVmYcdGjR9j7QPu/lkhjCiKSe+bMgVNOCdsFQkgIN9+s\nhJACJQURyR3r1kG/frDvviEhzJmTdERZR0khgz31VKhiuuuu4eau2UQixZoxA445JswuatEiLNjp\n3DnpqLKOxhQy2KefwsKFv/1cV6qU02XcRTbPoEHw2WfwyCNw4YX6C6qcYk0KZtYO+DdQCejv7j03\nen074CmgXhTLPe7+3zhjygZLl8ITT8C4cVC9eijSKCJFmDQJ5s8PLYSrr4bzzw/Naym32JKCmVUC\nHgTaAnOA0WY2xN2nFjrtEmCqu59sZrWBz83saXf/Na64MtV33/2218Fbb8FNN4XHBx6YXEwiGWvV\nKrjrrnBr0iSs1qxcWQmhAsTZUmgJzHD3mQBm9izQHiicFByoYWYGVAcWAWtijCljHXzwpmNiX3wR\nZtKJSCGffBK6h6ZODfvI3nefuooqUJxJoQ4wu9DzOcDBG53zH2AI8B1QA+jo7us2/iAz6wp0BahX\nr14swSbt55/hj38MY2QAtWqFhWoiUshHH8Hhh0OdOvDaa3DCCUlHlHOSHmg+DhgPHA38DnjTzD5w\n9yWFT3L3fkA/gBYtWnjao4zBiBFh2vS6KAUuXx5aBe3aJRuXSEb68cewz0GrVtC7d9gmc9ttk44q\nJ8WZFOYCuxd6Xjc6VlgXoKe7OzDDzL4GGgMb1fvMLrNmQd++sHZt8eeMGBFmFx19dHh+9NGq2iuy\niZ9+ChuDDBoUCn/tuutvdeElFnEmhdFAQzNrQEgGZwHnbHTOLOAY4AMz2xnYG5gZY0xp8cwzcPfd\nULVqyV2dBx8Mb7+dvrhEssrgwfDXv4YtA6+5BrbfPumI8kJsScHd15jZpcBwwpTUx9x9ipl1i17v\nC9wODDCzSYAB17n7grhiSoelS8MNwm5nWlUvUkYrV4bFOc89B/vvHza/adEi6ajyRqxjCu4+FBi6\n0bG+hR5/BxwbZwzpNHkyNGsWuo222EITIkTKpWpVWL0abr8drrsuTDWVtFGZiwr0/fchIVx5Zfjj\nRj/LIimaPTvsjzxzZvhr6sUX4cYb9T9RApQUYnD66WF3PxEpxbp18NBDYQHasGEwcWI4rmZ2YpQU\nRCQZX3wR9pC9+OIw1XTy5LBYRxKV9DoFEclXd90Vahf9979hZzS1DjKCWgoikj4TJsC0aeHx//1f\nKFXRubMSQgZRUhCR+K1aFao8tmgBf/97OFazZliMJhlF3UciEq+PPw4F7KZNg06d4F//SjoiKYFa\nCiISnxdfhMMOC8W9hg2Dxx8PLQTJWEoKIlLxli0L98ceC9dfH2YWqdpjVlBSEJGKs3gx/OlPcMgh\nYRxh223hzjuhRo2kI5MUKSmISMV46aWwCO2JJ+CUU5KORsqp1KRgZluZ2fVm1jd6vpeZHR9/aCKS\nFRYvDiUqTj8ddtkFRo8OaxCqVk06MimHVFoKjxEqmLaOnn8H3BVbRCKSXapVgy+/DIlg1Cg44ICk\nI5LNkEpSaOjudwGrAdx9BSFJSCEffgjvvpt0FCJp8u23YZrp8uWw1VYwdmwYUFYBu6yXyjqFX82s\nGuAA0aY5v8YaVZZZsQKOOOK3rTV33DHZeERis24d9OkD3buH5xdcAG3awJZa8pQrUmkp3A68DtQ1\ns8eBd4F/xBpVllm9Ovy/ct11MGdOGGsTyTnTp4cEcNll0Lp12B6zTZuko5IKVmp6d/dhZjYGOJTQ\nbXStu8+PPbIstPPOUKdO0lGIxMD9t1XJAwaElcmqV5STSk0KZvaGux8LDC7imIjksnHjYI89Qp/o\nf/8b1h3sskvSUUmMiu0+MrMqZrYtsLOZ1TCzbaNbXaBe+kIUkbRbuTIMHB90EPToEY41aqSEkAdK\nailcAlwN7ARM4bcZR0uAvsW9SUSy3Icfhq6iL76ALl3g1luTjkjSqNik4O73Avea2ZXufl8aYxKR\npDz4YBhI3mMPeOMNaNs26YgkzVIZaL7PzBoDTYBqhY4/E2dgIpJGq1eHNQbHHgtXXgm33QbVqycd\nlSQglYHmG4FjgcbAcOA44ENASUEk2y1aBFddFaqaDhoEDRtqv4M8l8o6hY7AUcA8dz8faApsE2tU\nIhIv97DXwT77wDPPhMU1a9cmHZVkgFSWIf7i7mvNbI2Z1QC+B/aIOS4RicsPP8Bf/wr/+x80bx7G\nDpo2TToqyRCpJIVxZrY9oTDeGMLso1GxRiUi8Vm9GkaOhF69QteRSlRIISX+NJiZAbe6+0/Ag2Y2\nHNjW3T9LS3QiUjG+/hr694c77oC6dcPzrbZKOirJQCWOKbi7A28Wej5DCUEki6xdC//+N+y3Hzzw\nAHz+eTiuhCDFSGWgebyZqUC6SLaZOhUOPzxMMT3iiFDArnHjpKOSDJdKZ+IBwGgz+wpYTljZ7O5+\nYKyRZYlx4+Cjj5KOQmQjq1fDccfBL7/AU0/BOeeogJ2kJJWkUO7NVs2sHfBvoBLQ3917FnHOkcB9\nQGVggbsfUd7vS0KnTjB5cnissjCSuEmTwvTSypVh4MBQr2innZKOSrJIqd1H7v5VUbfS3mdmlYAH\ngeMJq6HPNrMmG52zPdAHOMXd9wXOKNdVJOjXX+Hkk+G77+Dss5OORvLWL7+EDT0OOAAeeigca91a\nCUHKLM65aC2BGe4+E8DMngXaA1MLnXMO8JK7zwLI1n0attkGdt016Sgkb40YAX/+c9gn+aKL4Lzz\nko5IslgqA83lVQeYXej5nOhYYY2AHczsPTMba2adivogM+tqZmPMbMyPP/4YU7giWejWW+HII8Ms\no7fegkcege23TzoqyWIpJQUzq2tmR0WPq5pZRZW52BJoDpxIqKl0k5k12vgkd+/n7i3cvUXt2rUr\n6KtFsph7uD/44LAAbeJEOOaYZGOSnFBqUjCzPwFDgP7RoT0otAtbCeYCuxd6Xjc6VtgcYLi7L3f3\nBcD7hNpKIlKUBQtC99D6PQ6OPz4UsNtG5cikYqTSUrgcOIRQ3gJ3/4Kw8U5pRgMNzayBmVUBziIk\nl8IGA63NbEsz2xo4GJiWavAiecMdnnsuzCx67jmoUiXpiCRHpTLQvNLdf7VojnM0q6jUCc/uvsbM\nLiWU264EPObuU8ysW/R6X3efZmavAxOBdYRpq5PLeS0iuem770IBuyFDoEULePtt+P3vk45KclQq\nSeEjM/s7UC0aV7gEeDWVD3f3ocDQjY713eh5b6B3auGK5KGZM8Mg8j33wBVXqICdxCqV7qO/A0uB\n6cAVwNvADXEGJZL3Zs6Ehx8Oj1u3hlmz4G9/U0KQ2KXyE3YioVvnobiDySY//ADvvw9LlyYdieSU\ntWvh/vvhhhugalXo0AFq1gw3kTRIpaVwBjDDzP5rZu2iMYW8Nn9++KPtzDNh3jzYccekI5KcMHky\nHHooXH11mF46aZKSgaRdqS0Fdz/fzKoSWgxdgIfNbJi7d4s9ugz0wgshGQDsuWcY+2u0ycoKkTJa\nsCCsOdh661CzqGNHFbCTRKTUQenuq8xsMPALYSbRmUBeJoV588L9vfeGrt599002HslyX38NDRpA\nrVrw+ONhdXKtWklHJXkslcVrbc2sP/AVcC7wBJD39UA7dQqzA0XKZcUKuOYa2GsveDPax6pDByUE\nSVwqLYWuwHPAZe7+S8zxiOS+994Lheu++gr+8hdo2TLpiEQKpDKmkHXlrEUy1pVXhu0xf/c7ePfd\n0F0kkkGK7T4ysxHR/WIzW1TottjMFqUvRJEcUq9e6DaaOFEJQTJSSS2Fo6J7dXKKlNePP4ZVyKee\nCmecEaabimSwYlsK7r4ueviou68tfAMeTU94IlnKHZ55BvbZB158MdQvEskCqSxe27/wk2jx2kHx\nhJO5Vq+G3r3htdeSjkQy3pw5cMopcO65YXbRuHGhtSCSBYrtPjKz64DuQI1CYwgGOHnYUhg3Dv7+\n97CeqH59qF496YgkYw0bBu+8ExazXHYZVMr7IgCSRUpqKfQCagP3Rve1gVruvqO7X5uO4DLJuqgz\nbejQsN5I5exlAzNmhB8OgAsvhOnTw0wjJQTJMiUNNO/l7l+a2ZNAwbrd9fsquPvEmGMTyXxr1sB9\n98FNN8HOO8OXX0LlyrD77qW/VyQDlZQUugMXAg8W8ZoDbWKJSCRbTJwYWgVjxkD79tCnT0gIIlms\n2KTg7hdG94enLxyRLDFlCjRvDjvsELbHPOMMFbCTnJBK7aPTzKxG9Li7mT1vZk3jD00kAy1YEO6b\nNAnT0aZODWVzlRAkR6QyJfVWd19qZocCJwBPAw/HG5ZIhlm+PCw8a9AgDCqbhYFkFbCTHJNKUlgb\n3Z8EPOzug4Gq8YUkkmHefht+//swxfT882GnnZKOSCQ2qVRJnWdmDwLHA83NrAqpJROR7LZ2bahi\n+uij0LAhjBgBbTS/QnJbKr/czwRGACe4+2JCLaTusUYlkgkqVQoLVK67DiZMUEKQvFBqUnD3ZcAU\n4Egz6wbs4O7DYo9MJAk//ADnnBOmm0JoJfTsCVttlWxcImmSyuyjS4EXgHrR7XkzuzjuwETSyh2e\neirMKho0KNQ1Ac0qkryT6s5rLaMWA2Z2FzAS6BNnYCJpM2sWdOsWaha1ahVaB/vsk3RUIolIZUzB\ngF8LPV8dHRPJDffdB++/D/ffDx98oIQgeS2VlsKTwKdmNoiQDP4IPB5rVCJx+/xzWLECDjgAevQI\n1UwbNEg6KpHEpTLQ3Av4C7ACWAZ0c/d74g5MJBZr1oSB46ZN4dJLw7EaNZQQRCKprjdYCawqdJ9X\nxo4Ne6xLlhs/Hg4+GK6/Hk48MeyIJiIbKLX7yMxuAM4B/kfoPnrGzJ5297vjDi4TrFsHhx0Gq6JU\nuMMOycYj5fTWW3D88VCzZkgGp5+edEQiGSmVlkIn4CB3v9HdbwBaAp1jjSrDrFoFF18MX30V/tCU\nLLJ8ebhv3RquuSYUsFNCEClWKklhHhu2KLaMjpXKzNqZ2edmNsPMil0FbWYHmdkaM+uQyuemS/fu\n8Lvfhcc77wx77plsPFIGy5bB5ZeHmkVLl0K1anD33bDjjklHJpLRUpl9tAiYYmbDCZvrHAuMNrN/\nAbj71UW9ycwqETboaQvMid4zxN2nFnHeP4E3yn0VMXnzTVi9Gjp3hg4Zla6kRG+8AV27hvUHl1yi\nBWgiZZBKUngtuq33SYqf3RKY4e4zAczsWaA9MHWj8y4DBgEHpfi5aXXAAfDf/yYdhaRk+fIwo2jA\nANh777D2oHXrpKMSySqlJgV3f7Scn10HmF3o+Rxggx55M6sDnAocRQlJwcy6ElZWU69evXKGIzmv\nalWYPj3MLrr55tBlJCJlknQJ7PuA69x9XUknuXs/d2/h7i1q166dptAkK3z/PVx0ESxcCFtuGVYk\n33WXEoJIOcWZFOYCuxd6Xjc6VlgL4Fkz+wboAPQxsz/GGJPkCvfQTdSkSShk90nUq7llKj2iIlKc\nlJOCmZV1t7XRQEMzaxBtzHMWMKTwCe7ewN3ru3t94EXgYnd/uYzfU+HeeAOOOw6++CLpSKRI33wD\n7dpBly6w775hr4MTT0w6KpGckErp7JZmNgn4Mnre1MweKO197r4GuBQYDkwDnnf3KWbWLdqXIWP9\n73/wzjthNuNppyUdjWzisstg5Eh48MGwG9reeycdkUjOSKWtfT9hf+aXAdx9gpkdlcqHu/tQYOhG\nx/oWc27nVD4zXXbcMfzekQwxfTpsuy3sths88ECYZrrHHklHJZJzUuk+2sLdv93o2No4ghHZxOrV\nYeC4adOwLSZA/fpKCCIxSaWlMNvMWgIeLTS7DFBvu8Tvs8/gwgtDIbsOHeAeFecViVsqLYW/AlcT\ntuL8ATgkOiYSn6efhpYtw5TTQYPghRdCrRERiVUqi9fmE2YOicRv9WqoXBmOPDKUqrjzTpWmFUmj\nVEpnP0KoebQBd+8aS0SSn5YuDRUIp08PZa7r1IE+2gZcJN1S6T56C3g7un0E7EQOb7Qzdy4sWZJ0\nFHlm2LCw3uChh2D//UNrQUQSkUr30XOFn5vZk8CHsUWUoFdfhZNPDo93373kc6UCLF4MV1wBTz4J\n++wDH30ErVolHZVIXitPmYsGQE6O+P34Y7j/v/+Dl15KNpa8sG5dWCV4000wbpwSgkgGSGVMYTG/\njSlsQdhfodgNc3LB6adrGnxs5s2D++4LA8g1a4ZaIltvnXRUIhIpMSmYmQFN+a2Q3Tp332TQWaRU\n7mFjir/9DVauDJm3ZUslBJEMU2L3UZQAhrr72uimhCBl9/XXcOyxYSHa/vuHAnYtWyYdlYgUIZUx\nhfFmdkDskUhuWrcOTjoJPv00zC56911o1CjpqESkGMV2H5nZllGl0wMI+yt/BSwHjNCIODBNMUo2\nmj491CiqVi10G+26q6Z0iWSBkloKo6L7U4C9gROAMwib4ZwRc1ySrX79FW6/PRSw69UrHGvZUglB\nJEuUNNBsAO7+VZpiSczatdC7dyjNL5thzJgwbjBxIpx1FvxVJbJEsk1JSaG2mV1d3Ivu/q8Y4knE\n55+Hvd4rVw49HrVqJR1RFrr/frjqKthlFxg8GE45JemIRKQcSuo+qgRUB2oUc8sZ69aF+2eeCRNl\nttkm2XiyyvoJaQcdFFoJU6YoIYhksZJaCvPc/ba0RSLZZcmSsOlN5cqhldCqlVYki+SAkloKlrYo\nJLu89looYNevH1Sp8ltrQUSyXklJ4Zi0RSHZYcECOO+8sO5gu+3CJtb33BP2SxaRnFBsUnD3RekM\nRLLAd9/B//4Ht9wStso8+OCkIxKRCpbKHs05beFC+PLLpKPIYHPnhu0wL788lKiYNSsUshORnJT3\nSaFp0/B7D2CrrZKNJaO4Q//+cM01YdObP/4R6tVTQhDJceXZTyGnLFoUZlC++mqo2SbAV1/BMceE\nPZKbN4dJk0JCEJGcl/ctBYC994YTT0w6igyxYgUcckgoV9GvH1x0kQaSRfJI3iaFTz6BN9/UdsAF\nvvkm7Cy09dah26h5c6hbN+moRCTN8rb76IYb4OabYc2aPK/k/Ouv0KNH+Ed48cVwrH17JQSRPJW3\nLYW1a6FNm7BFcKVKSUeTkFGjQmmKyZPhnHPgqKOSjkhEEpa3LQUIXeV5mxB69AhlKRYvhldegaef\nViVAEcnvpJDX6taFP/85FLA76aSkoxGRDBFrUjCzdmb2uZnNMLPuRbx+rplNNLNJZjbSzJrGGU9e\n+/nnMMW0X7/w/MILoW/fUK5CRCQS25iCmVUCHgTaAnMIW3oOcfephU77GjjC3Reb2fFAP0C1Eyra\nK69At27w/fcaQBaREsXZUmgJzHD3me7+K/As0L7wCe4+0t0XR08/AfQbqyLNnw9nnx1W59WsCZ9+\nGqZciYijzVfNAAAQuUlEQVQUI86kUAeYXej5nOhYcS4EhhX1gpl1NbMxZjbmxx9/rMAQc9wHH4S6\nRbfdFrbKbNEi6YhEJMNlxJRUMzuKkBRaF/W6u/cjdC3RokULFe8vyezZIQGceiqcdlqo9rfHHklH\nJSJZIs6Wwlxg90LP60bHNmBm+wP9gfbuvjDGeHLbunXw8MNh85s//xmWLw9zbpUQRKQM4kwKo4GG\nZtbAzKoAZwFDCp9gZvWAl4Dz3f2LGGPJbV9+CUcfHQaTW7YMi9K00bSIlENs3UfuvsbMLgWGA5WA\nx9x9ipl1i17vC9wM1AT6WCi6tsbd1fFdFrNnh/rfVarAo49Cly4qYCci5RbrmIK7DwWGbnSsb6HH\nFwEXxRlDzlqwIKxA3n136N07jCHstlvSUYlIltOK5myzalWYVlqvHowbF45dcokSgohUiIyYfSQp\n+vjjsBJ52jTo1Ekb34hIhVNLIRu4w9VXw2GHwbJlMHQoPP64tsYUkQqnpJANzEJiuPjiUMDu+OOT\njkhEcpS6jzLVTz/BNddA587QujX861+aVSQisVNLIRO9/DI0aQIDBsBnn4VjSggikgZKCpnkhx/g\nzDPD9NKddgoF7C6/POmoRCSPKClkkkcegcGD4c47YfRoaN486YhEJM9oTCFps2bBd9/BIYfAtdfC\nGWfA3nsnHZWI5Cm1FJKybh08+GAoYPenP4XnVasqIYhIopQUkvD553DEEXDppdCqVVh3sIX+U4hI\n8tR9lG6jR8Phh8PWW4fZRZ06aWaRiGQM/XmaLsuXh/sDDwyrk6dOhQsuUEIQkYyipBC3lSvhhhug\nUaNQ2bRSJbjrLthll6QjExHZhLqP4jRyZChgN316aBVUqpR0RCIiJVJLIQ6//hoWnbVuDStWwOuv\nh/GDHXZIOjIRkRIpKcShcuXQOrjkEpg8GY47LumIRERSoqRQURYtCnskz5kTBo+HDoUHHoAaNZKO\nTEQkZUoKFWHQoFDArn9/GDEiHNtSwzUikn2UFDbHvHlw+unQoUPYDnPMGDj33KSjEhEpNyWFzdG9\nO7z2GvTsCaNGQbNmSUckIrJZ1MdRVt98E3ZBa9AgJIN//EP1ikSKsXr1aubMmcPKlSuTDiVvVKtW\njbp161K5cuVyvV9JIVXrC9hdf32oW/Taa7DrruEmIkWaM2cONWrUoH79+phW78fO3Vm4cCFz5syh\nQYMG5foMdR+lYvp0aNMmrD04/HDo0yfpiESywsqVK6lZs6YSQpqYGTVr1tyslplaCqV57bUwmLzN\nNvDEE3DeeapXJFIGSgjptbn/3mopFGf16nDfqlWoZDp1Kpx/vhKCiOS0vEwKzz8P48YVs67sl1/C\nrKLDDoM1a2DHHaFfP9h557THKSIV4+WXX8bMmD59esGx9957j5NOOmmD8zp37syLL74IhEHy7t27\n07BhQw488EBatWrFsGHDNjuWu+++m7322ou9996b4cOHF3nOhAkTaNWqFb///e85+eSTWbJkSZne\nvznyLikMGAAdO0LjxnDvvRu9+MEHYVrpP/8J++8Pq1YlEaKIVLCBAwfSunVrBg4cmPJ7brrpJubN\nm8fkyZP57LPPePnll1m6dOlmxTF16lSeffZZpkyZwuuvv87FF1/M2rVrNznvoosuomfPnkyaNIlT\nTz2V3r17l+n9myPvxhSmTIFq1eCjjwotOl62DK67LgwgN2gAb70FxxyTaJwiuebKK2H8+Ir9zGbN\n4L77Sj5n2bJlfPjhh7z77rucfPLJ9OjRo9TPXbFiBY888ghff/01VatWBWDnnXfmzDPP3Kx4Bw8e\nzFlnnUXVqlVp0KABe+21F6NGjaJVq1YbnPfFF1/Qpk0bANq2bctxxx3H7bffnvL7N0fetRQg7Hy5\nSRWK118PP7WTJikhiOSQwYMH065dOxo1akTNmjUZO3Zsqe+ZMWMG9erVY9ttty313KuuuopmzZpt\ncuvZs+cm586dO5fdd9+94HndunWZO3fuJuftu+++DB48GIAXXniB2bNnl+n9myPvWgoFFi6EXr2g\nRw+oXj0kg623TjoqkZxV2l/0cRk4cCBXXHEFAGeddRYDBw6kefPmxc7SKevsnXs36YfefI899hiX\nX345t99+O6eccgpVqlSp8O8oTqxJwczaAf8GKgH93b3nRq9b9PoJwAqgs7t/Flc8w4bB0085nbZ6\nEZpcGiqb/uEP0LatEoJIDlq0aBHvvPMOkyZNwsxYu3YtZkbv3r2pWbMmixcv3uT8WrVqsddeezFr\n1iyWLFlSamvhqquu4t13393k+FlnnUX37t03OFanTp2Cv/ohLO6rU6fOJu9t3Lgxb7zxBhC6kl57\n7bUyvX+zuHssN0Ii+ArYE6gCTACabHTOCcAwwIBDgE9L+9zmzZt7eTz+uPuuzPW3avzRHdybN3cf\nP75cnyUiqZk6dWqi3//www97165dNzjWpk0bHzFihK9cudLr169fEOM333zj9erV859++snd3a+9\n9lrv3Lmzr1q1yt3d58+f788///xmxTN58mTff//9feXKlT5z5kxv0KCBr1mzZpPzfvjhB3d3X7t2\nrZ9//vn+6KOPlun9Rf27A2M8hd/dcY4ptARmuPtMd/8VeBZov9E57YEnopg/AbY3s1jqRrRvD5/U\nO5OjV78euo0++QSaNo3jq0QkQwwcOJBTTz11g2Onn346AwcOpGrVqjz11FN06dKFZs2a0aFDB/r3\n7892220HwB133EHt2rVp0qQJ++23HyeddFJKYwwl2XfffTnzzDNp0qQJ7dq148EHH6RStE3vRRdd\nxJgxYwribtSoEY0bN2a33XajS5cupb6/olhIIBXPzDoA7dz9ouj5+cDB7n5poXNeBXq6+4fR87eB\n69x9zEaf1RXoClCvXr3m3377bfmCmjABttoKGjUq3/tFpEymTZvGPvvsk3QYeaeof3czG+vuLUp7\nb1bMPnL3fu7ewt1b1K5du/wf1LSpEoKISAniTApzgd0LPa8bHSvrOSIikiZxJoXRQEMza2BmVYCz\ngCEbnTME6GTBIcDP7j4vxphEJM3i6qKWom3uv3dsU1LdfY2ZXQoMJ8xEeszdp5hZt+j1vsBQwgyk\nGYQpqV3iikdE0q9atWosXLhQ5bPTxKP9FKpVq1buz4htoDkuLVq08PUj9CKS2bTzWvoVt/NaqgPN\n+buiWURiV7ly5XLvACbJyIrZRyIikh5KCiIiUkBJQURECmTdQLOZ/QiUc0kztYAFFRhONtA15wdd\nc37YnGvew91LXf2bdUlhc5jZmFRG33OJrjk/6JrzQzquWd1HIiJSQElBREQK5FtS6Jd0AAnQNecH\nXXN+iP2a82pMQURESpZvLQURESmBkoKIiBTIyaRgZu3M7HMzm2Fm3Yt43czs/uj1iWZ2YBJxVqQU\nrvnc6FonmdlIM8v6vUhLu+ZC5x1kZmui3QCzWirXbGZHmtl4M5tiZiPSHWNFS+Fnezsze8XMJkTX\nnNXVls3sMTObb2aTi3k93t9fqWzknE03Qpnur4A9gSrABKDJRuecAAwDDDgE+DTpuNNwzYcCO0SP\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5ad42c5278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# evaluate precision, recall, and AUC\n",
    "\n",
    "auc_score = 0.\n",
    "ks = 0.\n",
    "roc_auc = 0.\n",
    "recall = 0.\n",
    "precision = 0.\n",
    "\n",
    "from sklearn.metrics import precision_score, recall_score\n",
    "if y_proba_val.shape == y_testTf.shape:\n",
    "    precision = precision_score(y_testTf, y_pred)\n",
    "    recall = recall_score(y_testTf, y_pred)\n",
    "    auc_score = metrics.roc_auc_score(y_testTf, y_proba_val)\n",
    "    fpr, tpr, threshold = metrics.roc_curve(y_testTf, y_proba_val, pos_label=1)\n",
    "    roc_auc = metrics.auc(fpr, tpr)\n",
    "    ks = np.max(tpr - fpr)\n",
    "\n",
    "    print('precision: ', precision)\n",
    "    print('recall: ', recall)\n",
    "    print('AUC score = ', auc_score)\n",
    "    print('roc_auc = ', roc_auc)\n",
    "    print('KS_test = ', ks)\n",
    "\n",
    "    try:\n",
    "        plt.title('ROC_curve')\n",
    "        plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % roc_auc)\n",
    "        plt.legend(loc='lower right')\n",
    "        plt.plot([0,1], [0,1], 'r--')\n",
    "        plt.xlabel('False positive rate')\n",
    "        plt.ylabel('True positive rate')\n",
    "        plt.savefig('ROC_curve_TF.png')\n",
    "        plt.show()\n",
    "    except:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.80701754385964908,\n",
       " 0.8571428571428571,\n",
       " 0.90043843624406295,\n",
       " 0.69437340153452687]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part_4=list([precision, recall, roc_auc, ks])\n",
    "try:\n",
    "    part4 = \" \".join(map(repr, part_4))\n",
    "except TypeError:\n",
    "    part4 = repr(part_4)\n",
    "submissions[all_parts[3]]=part4\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:4],all_parts,submissions)\n",
    "[precision, recall, roc_auc, ks]\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Neural Network with Tensorflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cols = state_cols + MEV_cols\n",
    "n_inputs = len(cols)\n",
    "\n",
    "# inputs \n",
    "X_trainTf = df_train[cols].values\n",
    "X_testTf = df_test[cols].values\n",
    "\n",
    "# outputs \n",
    "y_trainTf = df_train['defaulter'].astype('int').values.reshape(-1,)\n",
    "y_testTf = df_test['defaulter'].astype('int').values.reshape(-1,)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "def neuron_layer(X, n_neurons, name, activation=None):\n",
    "    with tf.name_scope(name):\n",
    "        tf.set_random_seed(42)\n",
    "        n_inputs = int(X.get_shape()[1])\n",
    "        stddev = 2 / np.sqrt(n_inputs)\n",
    "        init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)\n",
    "        W = tf.Variable(init, name=\"kernel\")\n",
    "        b = tf.Variable(tf.zeros([n_neurons]), name=\"bias\")\n",
    "        Z = tf.matmul(X, W) + b\n",
    "        if activation is not None:\n",
    "            return activation(Z)\n",
    "        else:\n",
    "            return Z"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Construct Neural Network\n",
    "\n",
    "**Instructions**\n",
    "Implement Neural Network with two hidden layers. The number of nodes in the first and the second hidden layers is **n_hidden1** and **n_hidden2** correspondingly.\n",
    "Use neuron_layer() function to construct neural network layers.\n",
    "\n",
    "- Use ReLU activation function for hidden layers\n",
    "- The output layer has **n_outputs** and does not have an activation function\n",
    "- Use sparse softmax cross-entropy with logits as a loss function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_hidden1 = 20\n",
    "n_hidden2 = 10\n",
    "n_outputs = 2 # binary classification (defaulted, not defaulted bank)\n",
    "\n",
    "reset_graph()\n",
    "\n",
    "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n",
    "y = tf.placeholder(tf.int32, shape=(None), name=\"y\")\n",
    "\n",
    "### START CODE HERE ### (≈ 10-15 lines of code)\n",
    "### ...\n",
    "layer_1 = neuron_layer(X, n_hidden1, \"layer_1\", tf.nn.relu)\n",
    "layer_2 = neuron_layer(layer_1, n_hidden2, \"layer_2\", tf.nn.relu)\n",
    "logits = neuron_layer(layer_2, n_outputs, \"logits\")\n",
    "entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y)\n",
    "loss = tf.reduce_mean(entropy)\n",
    "### END CODE HERE ###\n",
    "\n",
    "init = tf.global_variables_initializer()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train Neural Network\n",
    "\n",
    "**Instructions**\n",
    "Train neural network passing batches of inputs of size **batch_size**, which predicts bank defaults / non-defaults. Once the network is trained, evaluate accuracy using **X_testTf**, **y_testTf**\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "learning_rate = 0.05\n",
    "n_epochs = 400\n",
    "batch_size = 50\n",
    "num_rec = X_trainTf.shape[0]\n",
    "n_batches = int(np.ceil(num_rec / batch_size))\n",
    "acc_test = 0. #  assign the result of accuracy testing to this variable\n",
    "\n",
    "### START CODE HERE ### (≈ 9-10 lines of code)\n",
    "# ... variable required for testing acc_test\n",
    "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n",
    "with tf.Session() as sess:\n",
    "    sess.run(init)\n",
    "    for i in range(n_epochs):\n",
    "        X_trainTf_batch, y_trainTf_batch = random_batch(X_trainTf, y_trainTf, batch_size)\n",
    "        sess.run([optimizer, loss], feed_dict={X: X_trainTf_batch, y: y_trainTf_batch})\n",
    "    \n",
    "    _, loss, logits = sess.run([optimizer, loss, logits], feed_dict={X: X_testTf, y: y_testTf})\n",
    "    preds = tf.nn.softmax(logits)\n",
    "    correct_preds = tf.equal(tf.argmax(preds, 1), y_testTf)\n",
    "    acc_test = sess.run(tf.reduce_sum(tf.cast(correct_preds, tf.float32))) / len(y_testTf)\n",
    "    \n",
    "### END CODE HERE ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.92447129909365555"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part5=str(acc_test)\n",
    "submissions[all_parts[4]]=part5\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:5],all_parts,submissions)\n",
    "acc_test\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "coursera": {
   "course_slug": "guided-tour-machine-learning-finance",
   "graded_item_id": "m5MrZ",
   "launcher_item_id": "sx92i"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
